/*
 * @Author: saber
 * @Date: 2021-11-02 15:51:40
 * @LastEditTime: 2021-11-09 18:02:54
 * @LastEditors: Zhang Kai
 * @Description:
 */
import auth from './auth';

export const TOKEN_ERROR = 'authTokenError';

const defalutInvalid = (data: any) => {
  return data.code === 102 || false;
};
export default (_context?: any) => {
  const name = 'authToken';
  const requestSuccess = (config: any) => {
    config.headers.common[auth.getKey()] = auth.getToken();
    return config;
  };
  const requestError = (error: any) => {
    return Promise.reject(error);
  };
  // 如果要用到this就不能使用 箭头函数
  const responseSuccess = function (response: any) {
    const config = response.config;
    const { data } = response;
    // if(data){
    //   // 这个里面要做啥呢
    // }else{

    // }
    // 如果判断 code 值是 没有权限的话
    // TODO: 这个判断的逻辑 可以放到 config 中 是否可以从context中获取当前的请求 避免前面的中间件修改了本次请求
    const invalid = config[name]?.invalid || defalutInvalid;
    if (invalid(data)) {
      // 退出登录
      auth.logout();
      // eslint-disable-next-line @typescript-eslint/ban-ts-comment
      // @ts-ignore
      this.emit(TOKEN_ERROR, data);
    }
    return response;
  };
  const responseError = (error: any) => {
    return Promise.reject(error);
  };
  return {
    name,
    requestSuccess,
    requestError,
    responseSuccess,
    responseError
  };
};
